#define  _CRT_SECURE_NO_WARNINGS 1

#include"test.h"

//VS2022 ×86 Debug 模式下运行
void ShuZu()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    for (i = 0; i <= 12; i++)//非法访问内存
    {
        arr[i] = 0;
        printf("hehe\n");
    }
    printf("&arr[0] = %p\n", &arr[0]);
    printf("&i      = %p\n", &i);

    //运行时没有检测出错，会死循环打印hehe
    //
    //监视 i arr[10] arr[11] arr[12]
    // 
    // 
    //VS2022 ×64 Debug 模式下运行
    //越界访问内存，会导致程序崩溃，不会死循环打印hehe

    //Relese模式下运行结果也会不同
}

//i和arr是局部变量，存放在栈区
//栈区的“默认”使用习惯是：（依赖于环境和配置，不总是如此）
// 1.先使用高地址的空间，再使用低地址的空间。(i 先定义，故位于比arr 高的地址)
// 2.数组随着下标增长，地址由低到高变化。
//所以arr[10] arr[11] arr[12] 可能覆盖到 i 的值，将 i 的值修改为0，造成死循环

